<?php 
	/*==================================================================*/
	/*		文件名:Action.class.php                             */
	/*		概要: 是所有控制器的父类，包括一些公共的控制器方法. */
	/*		作者: 高洛峰                                        */
	/*		创建时间: 2010-05-15                                */
	/*		最后修改时间:2010-05-15                             */
	/*		copyright (c)2009 lampteacher@gmail.com             */
	/*==================================================================*/
	//声明Action类继承MyTpl类，这样可以直接使用Smarty类中的属性和方法
	class Action extends MyTpl{
		private $timer;
	        /* 这是一个主运行方法，用户所有的访问都是通过这个方法开始运行的
		 * 不需要参数，没有返回值，通过这个方法加载用户的每个执行动作
		 */	
		function run(){
			$this->timer=new Timer();
			//如果声明了_initialize()方法则去调用这个方法，这样用户的每个动作都通过这个方法，可以用于做权限
			if(method_exists($this, '_initialize')){
				$this->_initialize();
			}	
			$act=isset($_GET["a"])?$_GET["a"]:"index";
			//调用用户访问的方法，例如：admin.php?m=user&a=add去访问user模块中的add方法		
			if(method_exists($this,$act)){
				eval('$this->'.$act.'();');  //如果$act为add,相当于$this->add();
			}else{
				echo '没有这个协作！';
			}
		}
	

		/* 这个方法用于向模板中发送用户的提示消息
		 * 参数$bool：传递一个bool值，决定输出正确提示消息和错误消息
		 * 没有返回值
		 */
		protected function message($bool, $message){
			if($bool){
				$this->assign("mess", "sucess");
				$this->assign("tmess", $message);	
			}else{
				$this->assign("mess", "error");
				$this->assign("tmess", $message);
			}
		}
		protected function redirect($url, $mk, $action,$data=""){
			echo '<script>';
			echo 'window.location="'.$url.'?m='.$mk.'&a='.$action.$data.'"';
			echo '</script>';
		}
  		 function display($resource_name, $cache_id = null, $compile_id = null){
       			$this->timer->stop();
			$this->assign("timer", $this->timer->spent());
			parent::display($resource_name, $cache_id = null, $compile_id = null);
    		  }
	}
